home *** CD-ROM | disk | FTP | other *** search
- import isys
- import os
- from installclass import InstallClass
- from installclass import FSEDIT_CLEAR_LINUX
- from installclass import FSEDIT_CLEAR_ALL
- import sys
- import string
-
- class Kickstart(InstallClass):
-
- def doRootPw(self, args):
- (args, extra) = isys.getopt(args, '', [ 'iscrypted' ])
-
- isCrypted = 0
- for n in args:
- (str, arg) = n
- if (str == '--iscrypted'):
- isCrypted = 1
-
- if len(extra) != 1:
- raise ValueError, "a single argument is expected to rootPw"
-
- InstallClass.doRootPw(self, extra[0], isCrypted = isCrypted)
- self.addToSkipList("accounts")
-
- def doAuthconfig(self, args):
- (args, extra) = isys.getopt(args, '',
- [ 'enablenis', 'nisdomain=', 'nisserver=', 'useshadow',
- 'enablemd5' ])
-
- useNis = 0
- useShadow = 0
- useMd5 = 0
- nisServer = None
- nisDomain = None
- nisBroadcast = 0
-
- for n in args:
- (str, arg) = n
- if (str == '--enablenis'):
- useNis = 1
- elif (str == '--useshadow'):
- useShadow = 1
- elif (str == '--enablemd5'):
- useMd5 = 1
- elif (str == '--nisserver'):
- nisServer = arg
- elif (str == '--nisdomain'):
- nisDomain = arg
-
- if useNis and not nisServer: nisBroadcast = 1
-
- self.setAuthentication(useShadow, useMd5, useNis, nisDomain,
- nisBroadcast, nisServer)
- self.addToSkipList("authentication")
-
- def doLilo (self, args):
- (args, extra) = isys.getopt(args, '',
- [ 'append=', 'location=', 'linear' ])
-
- appendLine = None
- location = "mbr"
- linear = 0
-
- for n in args:
- (str, arg) = n
- if str == '--append':
- appendLine = arg
- elif str == '--linear':
- linear = 1
- elif str == '--location':
- if arg == 'mbr' or arg == 'partition':
- location = arg
- elif arg == 'none':
- location = None
- else:
- raise ValueError, ("mbr, partition or none expected for "+
- "lilo command")
-
- self.setLiloInformation(location, linear, appendLine)
- self.addToSkipList("lilo")
-
- def doLiloCheck (self, args):
- drives = isys.hardDriveList ().keys()
- drives.sort(isys.compareDrives)
- device = drives[0]
- isys.makeDevInode(device, '/tmp/' + device)
- fd = os.open('/tmp/' + device, os.O_RDONLY)
- os.unlink('/tmp/' + device)
- block = os.read(fd, 512)
- os.close(fd)
- if block[6:10] == "LILO":
- sys.exit(0)
-
- def doTimezone(self, args):
- (args, extra) = isys.getopt(args, '',
- [ 'utc' ])
-
- isUtc = 0
-
- for n in args:
- (str, arg) = n
- if str == '--utc':
- isUtc = 1
-
- self.setTimezoneInfo(extra[0], asUtc = isUtc)
-
- self.addToSkipList("timezone")
-
-
- def doXconfig(self, args):
- (args, extra) = isys.getopt(args, '',
- [ 'server=', 'card=', 'monitor=', 'hsync=', 'vsync=',
- 'startxonboot', 'noprobe' ])
-
- if extra:
- raise ValueError, "unexpected arguments to xconfig command"
-
- server = None
- card = None
- monitor = None
- hsync = None
- vsync = None
- noProbe = 0
- startX = 0
-
- for n in args:
- (str, arg) = n
- if (str == "--noprobe"):
- noProbe = 1
- elif (str == "--server"):
- server = arg
- elif (str == "--card"):
- card = arg
- elif (str == "--monitor"):
- monitor = arg
- elif (str == "--hsync"):
- hsync = arg
- elif (str == "--vsync"):
- vsync = arg
- elif (str == "--startxonboot"):
- startX = 1
-
- self.configureX(server, card, monitor, hsync, vsync, noProbe,
- startX)
- self.addToSkipList("xconfig")
-
- def doInstall(self, args):
- self.installType = "install"
-
- def doUpgrade(self, args):
- self.installType = "upgrade"
-
- def doNetwork(self, args):
- # nodns is only used by the loader
- (args, extra) = isys.getopt(args, '',
- [ 'bootproto=', 'ip=', 'netmask=', 'gateway=', 'nameserver=',
- 'nodns', 'hostname='])
- bootProto = "dhcp"
- ip = None
- netmask = ""
- gateway = ""
- nameserver = ""
- hostname = ""
- for n in args:
- (str, arg) = n
- if str == "--bootproto":
- bootProto = arg
- elif str == "--ip":
- ip = arg
- elif str == "--netmask":
- netmask = arg
- elif str == "--gateway":
- gateway = arg
- elif str == "--nameserver":
- nameserver = arg
- elif str == "--hostname":
- hostname = arg
- self.setNetwork(bootProto, ip, netmask, gateway, nameserver)
- if hostname != "":
- self.setHostname(hostname)
-
- def doLang(self, args):
- self.setLanguage(args[0])
- self.addToSkipList("language")
-
- def doKeyboard(self, args):
- self.setKeyboard(args[0])
- self.addToSkipList("keyboard")
-
- def doZeroMbr(self, args):
- if args[0] == "yes":
- self.setZeroMbr(1)
-
- def doMouse(self, args):
- mouseToMouse = {
- "alpsps/2" : "ALPS - GlidePoint (PS/2)",
- "ascii" : "ASCII - MieMouse (serial)",
- "asciips/2" : "ASCII - MieMouse (PS/2)",
- "atibm" : "ATI - Bus Mouse",
- "generic" : "Generic - 2 Button Mouse (serial)" ,
- "generic3" : "Generic - 3 Button Mouse (serial)" ,
- "genericps/2" : "Generic - 2 Button Mouse (PS/2)" ,
- "generic3ps/2" : "Generic - 3 Button Mouse (PS/2)" ,
- "geniusnm" : "Generic - 2 Button Mouse (PS/2)" ,
- "geniusnmps/2" : "Genius - NetMouse (PS/2)" ,
- "geniusnsps/2" : "Genius - NetScroll (PS/2)" ,
- "thinking" : "" ,
- "thinkingps/2" : "" ,
- "logitech" : "Logitech - C7 Mouse (serial, old C7 type)" ,
- "logitechcc" : "Logitech - CC Series (serial)" ,
- "logibm" : "Logitech - Bus Mouse" ,
- "logimman" : "Logitech - MouseMan/FirstMouse (serial)" ,
- "logimmanps/2" : "Logitech - MouseMan/FirstMouse (PS/2)" ,
- "logimman+" : "Logitech - MouseMan+/FirstMouse+ (serial)" ,
- "logimman+ps/2" : "Logitech - MouseMan+/FirstMouse+ (PS/2)" ,
- "microsoft" : "Microsoft - Compatible Mouse (serial)" ,
- "msnew" : "Microsoft - Rev 2.1A or higher (serial)" ,
- "msintelli" : "Microsoft - IntelliMouse (serial)" ,
- "msintellips/2" : "Microsoft - IntelliMouse (PS/2)" ,
- "msbm" : "Microsoft - Bus Mouse" ,
- "mousesystems" : "Mouse Systems - Mouse (serial)" ,
- "mmseries" : "MM - Series (serial)" ,
- "mmhittab" : "MM - HitTablet (serial)" ,
- "sun" : "Sun - Mouse"
- }
-
- (args, extra) = isys.getopt(args, '', [ 'device=', 'emulthree' ])
- mouseType = "none"
- device = None
- emulThree = 0
-
- for n in args:
- (str, arg) = n
- if str == "--device":
- device = arg
- elif str == "--emulthree":
- emulThree = 1
-
- if extra:
- mouseType = extra[0]
-
- if mouseType != "none":
- self.setMouseType(mouseToMouse[mouseType], device, emulThree)
-
- self.addToSkipList("mouse")
-
- def doReboot(self, args):
- self.addToSkipList("complete")
-
- def doSkipX(self, args):
- self.addToSkipList("xconfig")
-
- def readKickstart(self, file):
- handlers = {
- "auth" : self.doAuthconfig ,
- "authconfig" : self.doAuthconfig ,
- "cdrom" : None ,
- "clearpart" : self.doClearPart ,
- "device" : None ,
- "driverdisk" : None ,
- "harddrive" : None ,
- "install" : self.doInstall ,
- "keyboard" : self.doKeyboard ,
- "lang" : self.doLang ,
- "lilo" : self.doLilo ,
- "lilocheck" : self.doLiloCheck ,
- "mouse" : self.doMouse ,
- "network" : self.doNetwork ,
- "nfs" : None ,
- "part" : self.definePartition ,
- "partition" : self.definePartition ,
- "raid" : self.defineRaid ,
- "reboot" : self.doReboot ,
- "rootpw" : self.doRootPw ,
- "skipx" : self.doSkipX ,
- "text" : None ,
- "timezone" : self.doTimezone ,
- "upgrade" : self.doUpgrade ,
- "xconfig" : self.doXconfig ,
- "xdisplay" : None ,
- "zerombr" : self.doZeroMbr ,
- }
-
- where = "commands"
- packages = []
- groups = []
- post = ""
- postInChroot = 1
- for n in open(file).readlines():
- if where == "post":
- post = post + n
- else:
- n = n[:len(n) - 1] # chop
-
- args = isys.parseArgv(n)
- if not args or args[0][0] == '#': continue
-
- if where == "commands":
- cmd = args[0]
- if cmd == "%packages":
- where = "packages"
- elif cmd[0:5] == "%post":
- args = isys.parseArgv(n)
- if len(args) >= 2 and args[1] == "--nochroot":
- postInChroot = 0
- where = "post"
- elif handlers[cmd]:
- handlers[cmd](args[1:])
- elif where == "packages":
- if n[0:5] == "%post":
- args = isys.parseArgv(n)
- if len(args) >= 2 and args[1] == "--nochroot":
- postInChroot = 0
- where = "post"
- elif n[0] == '@':
- n = n[1:]
- n = string.strip (n)
- groups.append(n)
- else:
- n = string.strip (n)
- packages.append(n)
-
- self.setGroups(groups)
- self.setPackages(packages)
- self.setPostScript(post, postInChroot)
-
- def doClearPart(self, args):
- if args[0] == '--linux':
- clear = FSEDIT_CLEAR_LINUX
- elif args[0] == '--all':
- clear = FSEDIT_CLEAR_ALL
- self.setClearParts(clear)
-
- def defineRaid(self, args):
- (args, extra) = isys.getopt(args, '', [ 'level=', 'device=' ] )
-
- for n in args:
- (str, arg) = n
- if str == '--level':
- level = int(arg)
- elif str == "--device":
- raidDev = arg
-
- mntPoint = extra[0]
- extra = extra[1:]
-
- self.addRaidEntry(mntPoint, raidDev, level, extra)
-
- def definePartition(self, args):
- # we just set up the desired partitions -- magic in our base class
- # does the actual partitioning (no, you don't want to know the
- # details)
- size = 0
- grow = 0
- maxSize = -1
- device = None
- onPart = None
-
- (args, extra) = isys.getopt(args, '', [ 'size=', 'maxsize=',
- 'grow', 'onpart=', 'ondisk=' ])
-
- for n in args:
- (str, arg) = n
- if str == '--size':
- size = int(arg)
- elif str == '--maxsize':
- maxSize = int(arg)
- elif str == '--grow':
- grow = 1
- elif str == '--onpart':
- onPart = arg
- elif str == '--ondisk':
- device = arg
-
- if len(extra) != 1:
- raise ValueError, "partition command requires one anonymous argument"
-
- if onPart:
- self.addToFstab(extra[0], onPart)
- else:
- self.addNewPartition(extra[0], size, maxSize, grow, device)
-
- def __init__(self, file):
- InstallClass.__init__(self)
- self.addToSkipList("bootdisk")
- self.addToSkipList("welcome")
- self.addToSkipList("package-selection")
- self.addToSkipList("confirm-install")
- self.addToSkipList("custom-upgrade")
- self.addToSkipList("network")
- self.setEarlySwapOn(1)
- self.partitions = []
-
- self.installType = "install"
- self.readKickstart(file)
-
-